home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / c / pcw.zip / PALETTE.C < prev    next >
Text File  |  1990-01-16  |  3KB  |  86 lines

  1. /***************************************************************/
  2. /* File Id.                     Palette.C                      */
  3. /* Author.                      Stan Milam.                    */
  4. /* Date Written.                28 Nov 89.                     */
  5. /*                                                             */
  6. /*           (c) Copyright 1989, 1990 by Stan Milam            */
  7. /*                                                             */
  8. /* Comments:  Routines to retrieve & set the EGA palette reg-  */
  9. /* isters. Routines maintain an internal table containing attr-*/
  10. /* ibute register values of the EGA.                           */
  11. /***************************************************************/
  12.  
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include <dos.h>
  16. #include "pcwproto.h"
  17.  
  18. static char palette_regs[17];          /* Palette Register & Overscan */
  19.  
  20. /***************************************************************/
  21. /*                       get_ega_palette()                     */
  22. /*                                                             */
  23. /* Retrieve the EGA palette values stored in ROM for the       */
  24. /* specified mode.                                             */
  25. /***************************************************************/
  26.  
  27. char *get_ega_palette(int mode) {
  28.  
  29.    unsigned far *ptr1, far *ptr2;
  30.    int mxc, mxr;
  31.  
  32.    chk_video_state(&mxr, &mxc);
  33.    if (_adaptor < EGA) return(NULL);
  34.    ptr1 = (unsigned far *) MK_FP(0,0x4a8);
  35.    ptr1 = (unsigned far *) MK_FP(*(ptr1 + 1), *ptr1);
  36.    ptr2 = (unsigned far *) palette_regs;
  37.    memset(palette_regs,'\0',17);       /* Clear Registers */
  38.    movedata(*(ptr1+1),*ptr1+(mode*64)+35,FP_SEG(ptr2),FP_OFF(ptr2),16);
  39.    return(palette_regs);
  40. }
  41.  
  42. /***************************************************************/
  43. /*                        set_palette()                        */
  44. /*                                                             */
  45. /* Change the value in the table, palette_regs[],              */
  46. /***************************************************************/
  47.  
  48. void set_palette(int attr_reg, int color) {
  49.  
  50.     palette_regs[attr_reg] = (char) color;
  51. }
  52.  
  53. /***************************************************************/
  54. /*                       load_ega_palette()                    */
  55. /*                                                             */
  56. /* Use BIOS to load the values in palette_regs[] into the the  */
  57. /* EGA palette attribute registers.                            */
  58. /***************************************************************/
  59.  
  60. void load_ega_palette(void) {
  61.  
  62.    union  REGS  regs;
  63.    struct SREGS sregs;
  64.    unsigned far *ptr;
  65.  
  66.    ptr       = (unsigned far *) palette_regs;
  67.    sregs.es  = FP_SEG(ptr);
  68.    regs.x.dx = FP_OFF(ptr);
  69.    regs.x.ax = 0x1002;
  70.    int86x(0x10,®s,®s,&sregs);
  71. }
  72.  
  73. /***************************************************************/
  74. /*                       set_load_palette()                    */
  75. /*                                                             */
  76. /* Set a value in the palette table and load the palette table */
  77. /* to the EGA registers in one fell swoop.                     */
  78. /***************************************************************/
  79.  
  80. void set_load_palette(int attr_reg, int color) {
  81.  
  82.    set_palette(attr_reg, color);
  83.    load_ega_palette();
  84. }
  85.  
  86.